2
2
.
.
1
1
.
.
3
3
C
C
r
r
e
e
a
a
t
t
e
e
F
F
i
i
l
l
t
t
e
e
r
r
C
C
h
h
a
a
i
i
n
n
I
I
n
n
f
f
o
o
[
[
G
G
]
]
This tutorial shows how to create Filter Chain by creating two Filter Classes.
We will use @Order(1) to specify in which order Filters should be executed.
They will be executed in that order during HTTP Request.
They will be executed in reverse order during HTTP Response.
Code before chain.doFilter(request, response) is executed during HTTP Request.
Code after chain.doFilter(request, response) is executed during HTTP Response.
Application Schema [Results]
Spring Boot Starters
GROUP
DEPENDENCY
DESCRIPTION
Web
Spring Web
Enables: Controller Annotations, Tomcat Server
P
P
r
r
o
o
c
c
e
e
d
d
u
u
r
r
e
e
Create Project: springboot_filter_create (add Spring Boot Starters from the table)
Create Package: controllers (inside main package)
– Create Class: MyController.java (inside controllers package)
Create Package: filters (inside main package)
– Create Class: MyFilter1.java (inside controllers package)
– Create Class: MyFilter2.java (inside controllers package)
MyController.java
package com.ivoronline.springboot_filter_create.controllers;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/Hello")
public String hello() {
System.out.println("Controller: Code from Controller");
return "Hello from Controller";
}
}
MyFilter1
MyController
Request
MyFilter2
Request
Request
MyFilter1.java
package com.ivoronline.springboot_filter_chain.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.stereotype.Component;
@Component
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//THIS CODE IS EXECUTED DURING HTTP REQUEST
System.out.println("MyFilter1 : Code for HTTP Request");
//DIVIDES HTTP REQUEST AND RESPONSE CODE
chain.doFilter(request, response);
//THIS CODE IS EXECUTED DURING HTTP RESPONSE
System.out.println("MyFilter1 : Code for HTTP Response");
}
}
MyFilter2.java
package com.ivoronline.springboot_filter_chain.filters;
import org.springframework.stereotype.Component;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
@Component
public class MyFilter2 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//THIS CODE IS EXECUTED DURING HTTP REQUEST
System.out.println("MyFilter2 : Code for HTTP Request");
//DIVIDES HTTP REQUEST AND RESPONSE CODE
chain.doFilter(request, response);
//THIS CODE IS EXECUTED DURING HTTP RESPONSE
System.out.println("MyFilter2 : Code for HTTP Response");
}
}
R
R
e
e
s
s
u
u
l
l
t
t
s
s
http://localhost:8080/Hello
Console
MyFilter1 : Code for HTTP Request
MyFilter2 : Code for HTTP Request
Controller: Code from Controller
MyFilter2 : Code for HTTP Response
MyFilter1 : Code for HTTP Response
Application Structure
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>